/**
 * 笔记本
 *   C
 *      GET   /note/create              显示添加笔记的表单页面
 *      POST  /note/create              执行笔记的插入
 *   D
 *      GET   /note/12312/delete        笔记的删除
 *   U
 *      GET   /note/12312/edit          笔记的修改
 *      POST  /note/12312/update        笔记的更新
 *   R
 *      GET   /note                     笔记的查看
 */
const express = require('express');
const bodyParser = require('body-parser');
const db = require('./db/db');
const NoteModel = require('./models/NoteModel');
//调用函数
db(() => {
    //数据库连接成功的回调
    const app = express();
    app.set('view engine', 'ejs');
    app.set('views', __dirname + '/templates');
    //设置中间件
    app.use(bodyParser.urlencoded({ extended: false }))

    //表单的添加
    app.get('/note/create', (request, response) => {
        //响应表单
        response.render('create');
    });

    //表单插入
    app.post('/note/create', (request, response) => {
        NoteModel.create(request.body, (err, data) => {
            if(err){
                response.send('插入失败, 请重试');
                return;
            }
            response.send('插入成功');
        });
    });

    //笔记的列表显示
    app.get('/note', (request, response) => {
        //读取 notes 集合中的数据
        NoteModel.find((err, data) => {
            if(err){
                response.send('读取失败, 请重试!!');
                return;
            }
            response.render('list', {data});
        });
    });

    //笔记的删除
    app.get('/note/:id/delete', (request, response) => {
        //获取 id
        let id = request.params.id;
        //根据 id 删除数据
        NoteModel.remove({_id: id}, (err, data) => {
            if(err) {
                //如果失败
                response.json({
                    code: 1,
                    msg: '删除失败'
                })
            }else{
                //方便返回 JSON 格式的响应体
                response.json({
                    code: 0,
                    msg: '删除成功'
                });
            }
        })
    });

    //笔记的修改
    app.get('/note/:id/edit', (request, response) => {
        //获取 id
        let id = request.params.id;
        //读取集合中指定 id 的数据
        NoteModel.findById(id, (err, data) => {
            if(err){
                response.send('读取失败');
            }else{
                response.render('edit', {data});
            }
        })
    });

    //笔记的更新
    app.post('/note/:id/update', (request, response) => {
        //获取 id
        let id = request.params.id;
        //更新
        NoteModel.updateOne({_id: id}, request.body, (err, data) => {
            if(err){
                response.json({
                    code: 2,
                    msg: '更新失败'
                })
            }else{
                response.json({
                    code: 0,
                    msg: '更新成功'
                })
            }
        })
    });

    app.listen(80, () => {
        console.log('服务已经启动....');
    })
});
 